package br.com.projeto.model.entities;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "arquivo")
public class Arquivo implements Serializable {

	private static final long serialVersionUID = -2366257833457031231L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "id")
	private Integer id;
	@Basic(optional = false)
	@Column(name = "nome")
	private String nome;
	@Basic(optional = false)
	@Column(name = "publico")
	private boolean publico;
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "arquivo")
	private List<Versao> versoes;
	@JoinColumn(name = "categoria_id", referencedColumnName = "id")
	@ManyToOne(optional = false, fetch = FetchType.EAGER)
	private Categoria categoria;
	@JoinColumn(name = "projeto_id", referencedColumnName = "id")
	@ManyToOne(fetch = FetchType.LAZY)
	private Projeto projeto;
	
	@Column(name="ultima_versao")
	@Temporal(TemporalType.TIMESTAMP)
	private Date ultimaVersao;
		
	public Arquivo() {
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public boolean isPublico() {
		return publico;
	}

	public void setPublico(boolean publico) {
		this.publico = publico;
	}

	public List<Versao> getVersoes() {
		return versoes;
	}

	public void setVersoes(List<Versao> versoes) {
		this.versoes = versoes;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	public Date getUltimaVersao() {
		return ultimaVersao;
	}

	public void setUltimaVersao(Date ultimaVersao) {
		this.ultimaVersao = ultimaVersao;
	}
	public void addVersao(Versao versao) {
		this.versoes.add(versao);
	}

	
}
